package com.tzt.jpush;

import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;

public class JPushUtil
{
    /**
     * 快捷地构建推送对象：所有平台，所有设备，内容为 ALERT 的通知。
     *
     * @param alias
     * @return
     */
    public static PushPayload buildPushObject_all_all_alert(String alias)
    {
        return PushPayload.alertAll(alias);
    }

    /**
     *
     * <功能详细描述>构建推送对象：所有平台，推送目标是别名为 "alias"，通知内容为 alert。
     * @param alias
     * @param alert
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static PushPayload buildPushObject_all_alias_alert(String alias, String alert)
    {
        return PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.alias(alias))
                .setNotification(Notification.alert(alert)).build();
    }

    /**
     *
     * <功能详细描述>构建推送对象：平台是 Android，目标是 tag 为 "tagId" 的设备，内容是 Android 通知
     * alert，并且标题为title。
     * @param tagId
     * @param alert
     * @param title
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static PushPayload buildPushObject_android_tag_alertWithTitle(String tagId, String alert, String title)
    {
        return PushPayload.newBuilder().setPlatform(Platform.android()).setAudience(Audience.tag(tagId))
                .setNotification(Notification.android(alert, title, null)).build();

    }

    /**
     *
     * <功能详细描述>构建推送对象：平台是 Andorid 与 iOS，推送目标是 （"tagOne" 与 "tagTwo"
     * 的并集）交（"aliasOne" 与 "aliasTwo" 的并集），推送内容是 - 内容为 msgContent 的消息，并且附加字段 from
     * = JPush。
     * @param tagOne
     * @param tagTwo
     * @param aliasOne
     * @param aliasTwo
     * @param msgContent
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras(String tagOne, String tagTwo,
            String aliasOne, String aliasTwo, String msgContent)
    {
        return PushPayload.newBuilder().setPlatform(Platform.android_ios())
                .setAudience(Audience.newBuilder().addAudienceTarget(AudienceTarget.tag(tagOne, tagTwo))
                        .addAudienceTarget(AudienceTarget.alias(aliasOne, aliasTwo)).build())
                .setMessage(Message.newBuilder().setMsgContent(msgContent).addExtra("from", "JPush").build()).build();
    }

    /**
     * 构建推送对象：平台是 iOS，推送目标是 "tag1", "tag_all" 的交集，推送内容同时包括通知与消息 - 通知信息是 ALERT，角标数字为 5，通知声音为 "happy"，并且附加字段 from = "JPush"；
     * 消息内容是 MSG_CONTENT。通知是 APNs 推送通道的，消息是 JPush 应用内消息通道的。APNs 的推送环境是“生产”（如果不显式设置的话，Library 会默认指定为开发）
     * @return
     */
    public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage(String registrationid,String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.ios())
//                .setAudience(Audience.tag_and("191e35f7e068ef0561a "))
                .setAudience(Audience.registrationId(registrationid))
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder()
                                .setAlert(alert)
//                                .setBadge(5)
//                                .setSound("happy")
                                .addExtra("from", "JPush")
                                .build())
                        .build())
                //.setMessage(Message.content("测试"))//自定义消息
                .setOptions(Options.newBuilder()
                        .setApnsProduction(false)
                        .build())
                .build();
    }

}
